package com.hyt.it.ogt.ykcj.service.grade;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.hyt.it.ogt.ykcj.domain.exam.ExamStemInfo;
import com.hyt.it.ogt.ykcj.domain.grade.EnterpriseExamineeInfo;
import com.hyt.it.ogt.ykcj.domain.grade.EnterpriseExamineeSubjectGrade;
import com.hyt.it.ogt.ykcj.domain.param.EnterpriseScoreLineSaveParam;
import com.hyt.it.ogt.ykcj.domain.param.ScoreLineItem;
import com.hyt.it.ogt.ykcj.domain.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 企业招聘考生信息Service接口
 *
 * @author liying
 * @date 2021-11-19
 */
public interface IEnterpriseExamineeInfoService extends IService<EnterpriseExamineeInfo> {

    /**
     * 查询企业招聘考生信息
     *
     * @param id 企业招聘考生信息ID
     * @return 企业招聘考生信息
     */
    EnterpriseExamineeInfo selectEnterpriseExamineeInfoById(String id);

    /**
     * 查询企业招聘考生信息列表
     *
     * @param enterpriseExamineeInfo 企业招聘考生信息
     * @return 企业招聘考生信息集合
     */
    List<EnterpriseExamineeInfo> selectEnterpriseExamineeInfoList(EnterpriseExamineeInfo enterpriseExamineeInfo);

    /**
     * 查询企业招聘考生信息列表
     *
     * @param enterpriseExamineeInfo 企业招聘考生信息
     * @return 企业招聘考生信息集合
     */
    List<EnterpriseExamineeInfo> selectEnterpriseExamineeInfoListRealName(EnterpriseExamineeInfo enterpriseExamineeInfo);


    /**
     * 分页查询企业招聘考生信息列表
     *
     * @param queryExamineeGradeVo
     * @return
     */
    PageInfo<List<EnterpriseExamineeInfoVo>> selectEnterpriseExamineeGradePage(QueryEnterpriseExamineeGradeVo queryExamineeGradeVo);

    /**
     * 新增企业招聘考生信息
     *
     * @param enterpriseExamineeInfo 企业招聘考生信息
     * @return 结果
     */
    int insertEnterpriseExamineeInfo(EnterpriseExamineeInfo enterpriseExamineeInfo);

    /**
     * 修改企业招聘考生信息
     *
     * @param enterpriseExamineeInfo 企业招聘考生信息
     * @return 结果
     */
    int updateEnterpriseExamineeInfo(EnterpriseExamineeInfo enterpriseExamineeInfo);

    /**
     * 批量删除企业招聘考生信息
     *
     * @param queryExamineeGradeVo
     * @return 结果
     */
    int deleteEnterpriseExamineeGrade(QueryEnterpriseExamineeGradeVo queryExamineeGradeVo) throws Exception;

    /**
     * 删除企业招聘考生信息信息
     *
     * @param id 企业招聘考生信息ID
     * @return 结果
     */
    int deleteEnterpriseExamineeInfoById(String id);


    /**
     * 获取企业招聘考生成绩信息详细
     *
     * @param id 考生ID
     * @return 企业招聘考生信息
     */
    AddEnterpriseExamineeInfoVo selectEnterpriseExamineeGradeById(String id);

    /**
     * 保存企业招聘考生成绩信息
     *
     * @param enterpriseExamineeInfoVo 企业招聘考生成绩信息
     * @return 结果
     * @throws Exception
     */
    Integer saveEnterpriseExamineeGrade(AddEnterpriseExamineeInfoVo enterpriseExamineeInfoVo) throws Exception;

    /**
     * 成绩归档
     *
     * @param queryExamineeGradeVo
     * @return 结果
     */
    Integer updateEnterpriseExamineeArchive(QueryEnterpriseExamineeGradeVo queryExamineeGradeVo) throws Exception;

    /**
     * 插入批量考生成绩(企业招聘)
     *
     * @param list 考生成绩信息集
     * @return 结果
     */
    void insertBatchEnterpriseExamineeGrade(List<EnterpriseExamineeInfoImportVo> list);


    /**
     * 重新计算考试合格标识
     *
     * @param examId
     * @return
     */
    void refreshEnterpriseExamineeQualified(String examId);

    /**
     * 重新计算考试科目合格标识
     *
     * @param examId
     * @return
     */
    void refreshEnterpriseExamineeSubjectQualified(String examId);


    /**
     * 重新计算考试合格标识
     *
     * @param examId
     * @return
     */
    void refreshEnterpriseExamineeQualified(String examId, String examineeId);

    /**
     * 获取考试考生是否合格
     *
     * @param sngleScoreLineItemMap
     * @param compositeScoreLineItemMap
     * @param allGradeList
     * @return
     */
    String getExamQualifiedStatus(Map<String, List<ScoreLineItem>> sngleScoreLineItemMap
            , Map<String, List<ScoreLineItem>> compositeScoreLineItemMap, List<EnterpriseExamineeSubjectGrade> allGradeList);


    /**
     * 获取考试考生科目是否合格
     *
     * @param grade
     * @return
     */
    String getGradeQualifiedStatus(EnterpriseExamineeSubjectGrade grade, Map<String, List<ScoreLineItem>> sngleScoreLineItemMap);


    /**
     * 科目分数线Map
     *
     * @param scoreLineSettings
     * @return
     */
    Map<String, List<ScoreLineItem>> getSngleScoreLineItemMap(List<EnterpriseScoreLineSaveParam> scoreLineSettings);

    /**
     * 复合分数线Map
     *
     * @param scoreLineSettings
     * @return
     */
    Map<String, List<ScoreLineItem>> getCompositeScoreLineItemMap(List<EnterpriseScoreLineSaveParam> scoreLineSettings);

    /**
     * 获取考生信息
     *
     * @param examinId
     * @param examineeId
     * @return
     */
    List<CandidateInfoVo> getExamineeInfo(String examinId, String examineeId);


    /**
     * 校验上游同步数据
     *
     * @param examId
     * @throws Exception
     */
    void checkExamineeOrigin(String examId);

    /**
     * 获取已经存在的题目
     *
     * @param examId
     * @param examSubjectMap
     * @return
     */
    Map<String, ExamStemInfo> existsExamStem(String examId, Map<String, ExamSubjectVo> examSubjectMap);


    /**
     * 获取已经存在的科目
     *
     * @param examId
     * @return
     */
    Map<String, ExamSubjectVo> existsExamSubject(String examId);

    /**
     * 根据考试id查询归档考生数
     *
     * @param examId
     * @return
     * @throws Exception
     */
    void checkExamineeArchived(String examId);

    /**
     * 查询复核考试考生列表
     *
     * @param queryExamineeGradeVo
     * @return
     */
    PageInfo<List<ExamReviewInfoVo>> selectReviewEnterpriseExamineeGradePage(QueryEnterpriseExamineeGradeVo queryExamineeGradeVo);

    /**
     * 获取考试区间名称
     *
     * @param regionScoreLineItemList
     * @param allGradeList
     * @return
     */
    String getExamRegionName(List<ScoreLineItem> regionScoreLineItemList, List<EnterpriseExamineeSubjectGrade> allGradeList);

    /**
     * 获取区间数据
     *
     * @param scoreLineSettings
     * @return
     */
    List<ScoreLineItem> getRegionScoreLineItems(List<EnterpriseScoreLineSaveParam> scoreLineSettings);


    /**
     * 获取科目区间名称
     *
     * @param regionScoreLineItemList
     * @param grade
     * @return
     */
    String getSubjectRegionName(List<ScoreLineItem> regionScoreLineItemList, EnterpriseExamineeSubjectGrade grade);


    /**
     * 取消成绩归档
     *
     * @param queryExamineeGradeVo
     * @return 结果
     */
    Integer cancelEnterpriseExamineeArchive(QueryEnterpriseExamineeGradeVo queryExamineeGradeVo) throws Exception;


    /**
     * 获取考试组考生成绩信息分页列表
     *
     * @param queryExamineeGradeVo 企业招聘考生信息
     * @return 企业招聘考生信息集合
     */
    List<EnterpriseExamineeInfoVo> selectGroupEnterpriseExamineeGradePage(QueryEnterpriseExamineeGradeVo queryExamineeGradeVo);


    /**
     * 获取同步考生的所有数据
     *
     * @param examId
     * @return
     */
    EnterpriseExamineeInfo getLastExamineeInfoByExamId(@Param("examId") String examId);


    /**
     * 批量查找考生信息
     *
     * @param ids
     * @return
     */
    List<EnterpriseExamineeInfo> selectEnterpriseExamineeInfoByIds(List<String> ids);

    /**
     * 通过证件号码查询考生信息
     *
     * @param examId
     * @param identificationNo
     * @return
     */
    List<EnterpriseExamineeInfo> getExamineeInfoByIdentificationNo(String examId, String identificationNo);
}
